package admin_user

import (
	"company_website/src/global"
	"company_website/src/model"
	"company_website/src/model/request"
	"company_website/src/model/response"
	"company_website/src/server"
	"company_website/src/utils"
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"os"
	"path"
)

type AdminUser struct {
}

// 设置个人信息
func (a *AdminUser) SetSelfInfo(c *gin.Context) {
	SelfInfo := &request.SelfInfo{}
	//从表单中获取JOSN数据
	selfInfo := c.PostForm("selfInfo")
	//解析JSON字符串到结构体
	err := json.Unmarshal([]byte(selfInfo), &SelfInfo)
	if err != nil {
		// 处理JSON解析错误...
		global.GVL_LOG.Error("设置个人信息JSON解析错误:", err)
		response.FailWithMessage("设置个人信息JSON解析错误"+err.Error(), c)
		return
	}
	//从请求中获取文件
	file, err := c.FormFile("image")
	if err != nil {
		global.GVL_LOG.Error("接收个人信息图片错误", err)
		response.FailWithMessage("接收个人信息图片错误", c)
		return
	}
	imaPath := path.Join(global.GVL_CFG.Local.TopicUrl, utils.GetFileName(file.Filename))
	//保存文件到服务器
	err = c.SaveUploadedFile(file, imaPath)
	if err != nil {
		global.GVL_LOG.Error("保存图片错误", err)
		response.FailWithMessage("保存图片错误", c)
		return
	}
	//保存个人信息到数据库
	err = server.AdminServer.SetSelfInfo(SelfInfo, imaPath)
	if err != nil {
		if _, err := os.Stat(imaPath); os.IsNotExist(err) {
			global.GVL_LOG.Warn("删除的图片不存在")
		} else if err != nil {
			// 处理 os.Stat 调用中可能发生的其他错误
			global.GVL_LOG.Error("检查图片存在性时发生错误:", err)
		} else {
			// 文件存在，尝试删除
			err := os.Remove(imaPath)
			if err != nil {
				global.GVL_LOG.Error("删除图片错误:", err)
			}
		}
		global.GVL_LOG.Error("个人信息设置失败", err)
		response.FailWithMessage("个人信息设置失败"+err.Error(), c)
		return
	}
	response.OkWithMessage("个人信息设置成功", c)

}

// 获取项目基础信息
func (a *AdminUser) GetItemBasicData(c *gin.Context) {
	dataReq := &request.AdminName{}
	dataRsq := &response.ItemBasic{}
	var err error
	if err := c.ShouldBindJSON(dataReq); err != nil {
		global.GVL_LOG.Error("参数获取失败", err)
		response.FailWithMessage("参数获取失败", c)
		return
	}
	fmt.Println("GetBasicData dataReq is:", dataReq)
	dataRsq, err = server.ServerComment.GetItemBasicInfoPage(dataReq.AdminName)
	if err != nil {
		global.GVL_LOG.Error("管理员项目信息查询失败", err)
		response.FailWithMessage("管理员项目信息查询失败"+err.Error(), c)
		return
	}
	response.OkWithData(dataRsq, c)
}

// 获取项目详细信息
func (a *AdminUser) GetAllItemData(c *gin.Context) {
	dataReq := &request.Item{}
	dataRsq := &model.Item{}
	var err error
	if err = c.ShouldBindJSON(dataReq); err != nil {
		global.GVL_LOG.Error("参数获取失败", err)
		response.FailWithMessage("参数获取失败", c)
		return
	}
	fmt.Println("GetBasicData dataReq is:", dataReq)
	dataRsq, err = server.ServerComment.GetAllItemInfoData(dataReq.ItemId)
	if err != nil {
		global.GVL_LOG.Error("管理员项目信息查询失败", err)
		response.FailWithMessage("管理员项目信息查询失败"+err.Error(), c)
		return
	}
	response.OkWithData(dataRsq, c)
}

// 获取更多的项目
func (a *AdminUser) GetAllItem(c *gin.Context) {
	itemReq := &request.ItemPage{}
	dataRsq := &response.ItemBasicPage{}
	var err error
	if err = c.ShouldBindJSON(itemReq); err != nil {
		global.GVL_LOG.Error("参数获取失败", err)
		response.FailWithMessage("参数获取失败", c)
		return
	}
	//去数据库中查找所有项目基础信息
	dataRsq, err = server.ServerComment.GetAllItem(itemReq)
	if err != nil {
		global.GVL_LOG.Error("接受参数失败", err)
		response.FailWithMessage("查看失败，请重新输入正确的参数", c)
		return
	}
	response.OkWithData(dataRsq, c)
}
